home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Sun Solutions 1997 April to September
/
Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso
/
products
/
Hyperion
/
src
/
README.bsd386
< prev
next >
Wrap
Text File
|
1997-02-26
|
8KB
|
305 lines
- @(#)README.bsd386 1.1 1/30/94 -
To compile and run WorkMan on BSD/386, you will need two things not
provided in the BSD/386 release:
1) XView libraries and include files (3.0 or later). (available on
bsdi.com for anonymous FTP)
2) the attached diffs for the CDROM library (to provide a volume
function with better resolution).
If you have a SoundBlaster Pro with a driver installed (also available
from bsdi.com, the SBlast-1.5 version, not Steve McCanne's version), you
can compile SoundBlaster volume control code, which is useful for
non-SCSI CDROM devices. To do so, edit the Imakefile to remove the
comments around LOCALDEFS. Once you have compiled, you can enable the
SoundBlaster volume control by patching the sb_fd variable to -1, like
so:
% /usr/bin/gdb -w workman
(gdb) set sb_fd = -1
(gdb) quit
%
Use imake to generate a BSD/386 Makefile, with something like:
imake -DUseInstalled -I/usr/src/local/XView3.0/config -I/usr/X11/lib/X11/config
For SCSI CD-ROM drives, WorkMan must be run as root (perhaps as setuid,
but that may have security implications on database file reading) in
order to have access to issue SCSI audio commands.
==John Kohl
jtk@kolvir.blrc.ma.us
---------------
And here's a patch file:
diff -c -r /cdrom/usr/src/lib/libcdrom/common.c ./common.c
*** /cdrom/usr/src/lib/libcdrom/common.c Mon Mar 8 01:13:11 1993
--- ./common.c Fri Jun 25 02:23:30 1993
***************
*** 28,33 ****
--- 28,34 ----
scsi2_status,
scsi2_eject,
scsi2_volume,
+ scsi2_volume2,
},
{
"panasonic",
***************
*** 38,43 ****
--- 39,45 ----
panasonic_status,
panasonic_eject,
panasonic_volume,
+ panasonic_volume2,
},
{
"toshiba",
***************
*** 48,53 ****
--- 50,56 ----
toshiba_status,
toshiba_eject,
toshiba_volume,
+ toshiba_volume2,
},
{
"mitsumi",
***************
*** 58,63 ****
--- 61,67 ----
mitsumi_status,
mitsumi_eject,
mitsumi_volume,
+ mitsumi_volume2,
},
{ NULL },
};
***************
*** 198,201 ****
--- 202,216 ----
int volume;
{
return((*cdinfo->funcs->volume)(cdinfo, volume));
+ }
+
+ /*
+ * Set the stereo volume level 0 = min, 255 = max
+ */
+ int
+ cdvolume2(cdinfo, left, right)
+ struct cdinfo *cdinfo;
+ int left, right;
+ {
+ return((*cdinfo->funcs->volume2)(cdinfo, left, right));
}
diff -c -r /cdrom/usr/src/lib/libcdrom/devs.h ./devs.h
*** /cdrom/usr/src/lib/libcdrom/devs.h Mon Mar 8 11:42:08 1993
--- ./devs.h Fri Jun 25 02:21:35 1993
***************
*** 21,26 ****
--- 21,27 ----
int __P((*status)(struct cdinfo *, struct cdstatus *));
int __P((*eject)(struct cdinfo *));
int __P((*volume)(struct cdinfo *, int));
+ int __P((*volume2)(struct cdinfo *, int, int));
};
struct cdinfo *scsi2_probe __P((int, char *, char *, char *, int));
***************
*** 30,35 ****
--- 31,37 ----
int scsi2_status __P((struct cdinfo *, struct cdstatus *));
int scsi2_eject __P((struct cdinfo *));
int scsi2_volume __P((struct cdinfo *, int));
+ int scsi2_volume2 __P((struct cdinfo *, int, int));
struct cdinfo *panasonic_probe __P((int, char *, char *, char *, int));
int panasonic_close __P((struct cdinfo *));
***************
*** 38,43 ****
--- 40,46 ----
int panasonic_status __P((struct cdinfo *, struct cdstatus *));
int panasonic_eject __P((struct cdinfo *));
int panasonic_volume __P((struct cdinfo *, int));
+ int panasonic_volume2 __P((struct cdinfo *, int, int));
struct cdinfo *toshiba_probe __P((int, char *, char *, char *, int));
int toshiba_close __P((struct cdinfo *));
***************
*** 46,51 ****
--- 49,55 ----
int toshiba_status __P((struct cdinfo *, struct cdstatus *));
int toshiba_eject __P((struct cdinfo *));
int toshiba_volume __P((struct cdinfo *, int));
+ int toshiba_volume2 __P((struct cdinfo *, int, int));
struct cdinfo *mitsumi_probe __P((int, char *, char *, char *, int));
int mitsumi_close __P((struct cdinfo *));
***************
*** 54,59 ****
--- 58,64 ----
int mitsumi_status __P((struct cdinfo *, struct cdstatus *));
int mitsumi_eject __P((struct cdinfo *));
int mitsumi_volume __P((struct cdinfo *, int));
+ int mitsumi_volume2 __P((struct cdinfo *, int, int));
struct cdinfo *make_cdinfo __P((int, int));
int scsi_inquiry __P((int, char *, char *, char *, int *));
diff -c -r /cdrom/usr/src/lib/libcdrom/mitsumi.c ./mitsumi.c
*** /cdrom/usr/src/lib/libcdrom/mitsumi.c Mon Mar 8 01:14:05 1993
--- ./mitsumi.c Fri Jun 25 02:24:40 1993
***************
*** 238,247 ****
if (val > 255)
val = 255;
bzero(args, sizeof args);
args[0] = 0xae;
! args[1] = val;
! args[3] = val;
mitsumi_cmd(cdinfo->fd, args, 5, (char *)buf, 5);
if (buf[0] & 1)
fprintf(stderr, "error setting volume: %x\n", buf[0] & 0xff);
--- 238,258 ----
if (val > 255)
val = 255;
+ return mitsumi_volume2(cdinfo, val, val);
+ }
+
+ int
+ mitsumi_volume2(cdinfo, left, right)
+ struct cdinfo *cdinfo;
+ int left, right;
+ {
+ char args[20];
+ char buf[20];
+
bzero(args, sizeof args);
args[0] = 0xae;
! args[1] = left;
! args[3] = right;
mitsumi_cmd(cdinfo->fd, args, 5, (char *)buf, 5);
if (buf[0] & 1)
fprintf(stderr, "error setting volume: %x\n", buf[0] & 0xff);
diff -c -r /cdrom/usr/src/lib/libcdrom/panasonic.c ./panasonic.c
*** /cdrom/usr/src/lib/libcdrom/panasonic.c Mon Mar 8 11:42:10 1993
--- ./panasonic.c Fri Jun 25 02:24:55 1993
***************
*** 218,220 ****
--- 218,228 ----
{
return (0);
}
+
+ int
+ panasonic_volume2(cdinfo, left, right)
+ struct cdinfo *cdinfo;
+ int left, right;
+ {
+ return (0);
+ }
diff -c -r /cdrom/usr/src/lib/libcdrom/scsi2.c ./scsi2.c
*** /cdrom/usr/src/lib/libcdrom/scsi2.c Mon Mar 8 11:42:11 1993
--- ./scsi2.c Fri Jun 25 02:26:24 1993
***************
*** 233,240 ****
struct cdinfo *cdinfo;
int volume;
{
- char cdb[10];
- char buf[100];
int val;
val = (volume * 255) / 100;
--- 233,238 ----
***************
*** 243,252 ****
if (val > 255)
val = 255;
/* mode select */
bzero(cdb, 6);
cdb[0] = 0x15;
! cdb[1] = 0x10;
cdb[4] = 20;
bzero(buf, sizeof buf);
--- 241,260 ----
if (val > 255)
val = 255;
+ return scsi2_volume2(cdinfo, val, val);
+ }
+
+ /* each side is [0 .. 255] */
+ int
+ scsi2_volume2(struct cdinfo *cdinfo, int left, int right)
+ {
+ char cdb[10];
+ char buf[100];
+
/* mode select */
bzero(cdb, 6);
cdb[0] = 0x15;
! cdb[1] = 0x10; /* SCSI-2 format */
cdb[4] = 20;
bzero(buf, sizeof buf);
***************
*** 257,271 ****
buf[4] = 0xe; /* page code */
buf[5] = 14;
! buf[6] = 4;
! buf[12] = 1;
! buf[13] = val;
! buf[14] = 2;
! buf[15] = val;
!
! if (scsi_cmd_write(cdinfo->fd, cdb, buf, 18) < 0) {
! perror("scsi command: mode select");
! return (-1);
}
return (0);
--- 265,279 ----
buf[4] = 0xe; /* page code */
buf[5] = 14;
! buf[6] = 4; /* immed */
! buf[12] = 1; /* port 0 to channel 0 */
! buf[13] = left;
! buf[14] = 2; /* port 1 to channel 1 */
! buf[15] = right;
!
! if (scsi_cmd_write(cdinfo->fd, cdb, buf, 20) < 0) {
! perror("scsi command: mode select (volume):");
! return (-1);
}
return (0);
diff -c -r /cdrom/usr/src/lib/libcdrom/toshiba.c ./toshiba.c
*** /cdrom/usr/src/lib/libcdrom/toshiba.c Mon Mar 8 11:42:12 1993
--- ./toshiba.c Fri Jun 25 02:25:25 1993
***************
*** 272,274 ****
--- 272,283 ----
/* Not supported by drive */
return (0);
}
+
+ int
+ toshiba_volume2(cdinfo, left, right)
+ struct cdinfo *cdinfo;
+ int left, right;
+ {
+ /* Not supported by drive */
+ return (0);
+ }